package mx.gob.imss.reiman.clientes.model;

import java.util.ArrayList;
import java.util.List;

//TODO: 
public class LabOrder {
	private String NUM_FOLIO_ORDEN = "";
	private String FECHA_HORA_CITA = "";
	// Identificador del Expediente Electr�nico
	private String cveIdee = "";
	private String FOLIO_SOLICITUD_LAB = "";
	private String STP_FECHA_ATENCION = "";
	private String ORIGEN_PACIENTE = "";
	private String CVE_LUGAR_ATENCION = "";
	private String CVE_TIPO_LUGAR_ATENCION = "";
	private String CVE_TURNO = "";
	// Clave del Servicio M�dico Solicitante
	private String CVE_ESPECIALIDAD = "";
	private String CVE_TIPO_SOLICITUD = "";
	private String CVE_PRESUPUESTAL = "";
	private String CVE_SERV_MED_SOLICITANTE = "";
	private String APELLIDO_PATERNO_MED_SOL = "";
	private String APELLIDO_MATERNO_MED_SOL = "";
	private String NOMBRE_MED_SOL = "";
	private String CVE_MATRICULA_MED_SOL = "";
	private String CVE_CEDULA_MED_SOL = "";
	private String CVE_DIAG_PRESUNTIVO = "";
	private String COMP_DIAG_PRESUNTIVO = "";
	private List<Estudio> estudios = new ArrayList<Estudio>();
	private Integer selectedComponent = 0;
	private List<Integer> idsEstudios = new ArrayList<Integer>();
	private List<Prueba> pruebas = new ArrayList<Prueba>();
	private int seqEstudios = 0;
	private String CVE_PRES_UM_REALIZA_ESTUDIO = "";
	private String FECHA_HORA_REG_LO = "";
	private String APELLIDO_PATERNO_REG_LO = "";
	private String APELLIDO_MATERNO_REG_LO = "";
	private String NOMBRE_REG_LO = "";
	private String CVE_MAT_REG_LOG = "";
	private String SISTEMA_SOLICITANTE = "";
	private String CVE_SERVICIO_CONTRATADO = "";
	private String ID_APLICACION = "";
	private String RFC_PROVEEDOR = "";
	private String TIPO_MENSAJE = "";
	private String NUM_CONTRATO = "";
	private String FECHA_HORA_RECEPCION = "";

	public List<Prueba> getPruebas() {
		return pruebas;
	}

	public void setPruebas(List<Prueba> pruebas) {
		this.pruebas = pruebas;
	}

	public String getNUM_FOLIO_ORDEN() {
		return NUM_FOLIO_ORDEN;
	}

	public void setNUM_FOLIO_ORDEN(String nUMFOLIOORDEN) {
		NUM_FOLIO_ORDEN = nUMFOLIOORDEN;
	}

	public String getFECHA_HORA_CITA() {
		return FECHA_HORA_CITA;
	}

	public void setFECHA_HORA_CITA(String fECHAHORACITA) {
		FECHA_HORA_CITA = fECHAHORACITA;
	}

	public String getFOLIO_SOLICITUD_LAB() {
		return FOLIO_SOLICITUD_LAB;
	}

	public void setFOLIO_SOLICITUD_LAB(String fOLIOSOLICITUDLAB) {
		FOLIO_SOLICITUD_LAB = fOLIOSOLICITUDLAB;
	}

	public String getORIGEN_PACIENTE() {
		return ORIGEN_PACIENTE;
	}

	public void setORIGEN_PACIENTE(String oRIGENPACIENTE) {
		ORIGEN_PACIENTE = oRIGENPACIENTE;
	}

	public String getCVE_LUGAR_ATENCION() {
		return CVE_LUGAR_ATENCION;
	}

	public void setCVE_LUGAR_ATENCION(String cVELUGARATENCION) {
		CVE_LUGAR_ATENCION = cVELUGARATENCION;
	}

	public String getCVE_TIPO_LUGAR_ATENCION() {
		return CVE_TIPO_LUGAR_ATENCION;
	}

	public void setCVE_TIPO_LUGAR_ATENCION(String cVETIPOLUGARATENCION) {
		CVE_TIPO_LUGAR_ATENCION = cVETIPOLUGARATENCION;
	}

	public String getCVE_TURNO() {
		return CVE_TURNO;
	}

	public void setCVE_TURNO(String cVETURNO) {
		CVE_TURNO = cVETURNO;
	}

	public String getSTP_FECHA_ATENCION() {
		return STP_FECHA_ATENCION;
	}

	public void setSTP_FECHA_ATENCION(String sTPFECHAATENCION) {
		STP_FECHA_ATENCION = sTPFECHAATENCION;
	}

	public String getCVE_ESPECIALIDAD() {
		return CVE_ESPECIALIDAD;
	}

	public void setCVE_ESPECIALIDAD(String cVEESPECIALIDAD) {
		CVE_ESPECIALIDAD = cVEESPECIALIDAD;
	}

	public String getCveIdee() {
		return cveIdee;
	}

	public void setCveIdee(String cveIdee) {
		this.cveIdee = cveIdee;
	}

	public String getCVE_TIPO_SOLICITUD() {
		return CVE_TIPO_SOLICITUD;
	}

	public void setCVE_TIPO_SOLICITUD(String cVETIPOSOLICITUD) {
		CVE_TIPO_SOLICITUD = cVETIPOSOLICITUD;
	}

	public String getCVE_PRESUPUESTAL() {
		return CVE_PRESUPUESTAL;
	}

	public void setCVE_PRESUPUESTAL(String cVEPRESUPUESTAL) {
		CVE_PRESUPUESTAL = cVEPRESUPUESTAL;
	}

	public String getCVE_SERV_MED_SOLICITANTE() {
		return CVE_SERV_MED_SOLICITANTE;
	}

	public void setCVE_SERV_MED_SOLICITANTE(String cVESERVMEDSOLICITANTE) {
		CVE_SERV_MED_SOLICITANTE = cVESERVMEDSOLICITANTE;
	}

	public String getAPELLIDO_PATERNO_MED_SOL() {
		return APELLIDO_PATERNO_MED_SOL;
	}

	public void setAPELLIDO_PATERNO_MED_SOL(String aPELLIDOPATERNOMEDSOL) {
		APELLIDO_PATERNO_MED_SOL = aPELLIDOPATERNOMEDSOL;
	}

	public String getAPELLIDO_MATERNO_MED_SOL() {
		return APELLIDO_MATERNO_MED_SOL;
	}

	public void setAPELLIDO_MATERNO_MED_SOL(String aPELLIDOMATERNOMEDSOL) {
		APELLIDO_MATERNO_MED_SOL = aPELLIDOMATERNOMEDSOL;
	}

	public String getNOMBRE_MED_SOL() {
		return NOMBRE_MED_SOL;
	}

	public void setNOMBRE_MED_SOL(String nOMBREMEDSOL) {
		NOMBRE_MED_SOL = nOMBREMEDSOL;
	}

	public String getCVE_MATRICULA_MED_SOL() {
		return CVE_MATRICULA_MED_SOL;
	}

	public void setCVE_MATRICULA_MED_SOL(String cVEMATRICULAMEDSOL) {
		CVE_MATRICULA_MED_SOL = cVEMATRICULAMEDSOL;
	}

	public String getCVE_CEDULA_MED_SOL() {
		return CVE_CEDULA_MED_SOL;
	}

	public void setCVE_CEDULA_MED_SOL(String cVECEDULAMEDSOL) {
		CVE_CEDULA_MED_SOL = cVECEDULAMEDSOL;
	}

	public String getCVE_DIAG_PRESUNTIVO() {
		return CVE_DIAG_PRESUNTIVO;
	}

	public void setCVE_DIAG_PRESUNTIVO(String cVEDIAGPRESUNTIVO) {
		CVE_DIAG_PRESUNTIVO = cVEDIAGPRESUNTIVO;
	}

	public String getCOMP_DIAG_PRESUNTIVO() {
		return COMP_DIAG_PRESUNTIVO;
	}

	public void setCOMP_DIAG_PRESUNTIVO(String cOMPDIAGPRESUNTIVO) {
		COMP_DIAG_PRESUNTIVO = cOMPDIAGPRESUNTIVO;
	}

	public List<Estudio> getEstudios() {
		return estudios;
	}

	public List<Integer> getIdsEstudios() {
		return idsEstudios;
	}

	public void setIdsEstudios(List<Integer> idsEstudios) {
		this.idsEstudios = idsEstudios;
	}

	public int getSeqEstudios() {
		return ++seqEstudios;
	}

	public void setSeqEstudios(int seqEstudios) {
		this.seqEstudios = seqEstudios;
	}

	public Integer getSelectedComponent() {
		return selectedComponent;
	}

	public void setSelectedComponent(Integer selectedComponent) {
		this.selectedComponent = selectedComponent;
	}

	public void setEstudios(List<Estudio> estudios) {
		this.estudios = estudios;
	}

	public String getCVE_PRES_UM_REALIZA_ESTUDIO() {
		return CVE_PRES_UM_REALIZA_ESTUDIO;
	}

	public void setCVE_PRES_UM_REALIZA_ESTUDIO(String cVEPRESUMREALIZAESTUDIO) {
		CVE_PRES_UM_REALIZA_ESTUDIO = cVEPRESUMREALIZAESTUDIO;
	}

	public String getFECHA_HORA_REG_LO() {
		return FECHA_HORA_REG_LO;
	}

	public void setFECHA_HORA_REG_LO(String fECHAHORAREGLO) {
		FECHA_HORA_REG_LO = fECHAHORAREGLO;
	}

	public String getAPELLIDO_PATERNO_REG_LO() {
		return APELLIDO_PATERNO_REG_LO;
	}

	public void setAPELLIDO_PATERNO_REG_LO(String aPELLIDOPATERNOREGLO) {
		APELLIDO_PATERNO_REG_LO = aPELLIDOPATERNOREGLO;
	}

	public String getAPELLIDO_MATERNO_REG_LO() {
		return APELLIDO_MATERNO_REG_LO;
	}

	public void setAPELLIDO_MATERNO_REG_LO(String aPELLIDOMATERNOREGLO) {
		APELLIDO_MATERNO_REG_LO = aPELLIDOMATERNOREGLO;
	}

	public String getNOMBRE_REG_LO() {
		return NOMBRE_REG_LO;
	}

	public void setNOMBRE_REG_LO(String nOMBREREGLO) {
		NOMBRE_REG_LO = nOMBREREGLO;
	}

	public String getCVE_MAT_REG_LOG() {
		return CVE_MAT_REG_LOG;
	}

	public void setCVE_MAT_REG_LOG(String cVEMATREGLOG) {
		CVE_MAT_REG_LOG = cVEMATREGLOG;
	}

	public String getSISTEMA_SOLICITANTE() {
		return SISTEMA_SOLICITANTE;
	}

	public void setSISTEMA_SOLICITANTE(String sISTEMASOLICITANTE) {
		SISTEMA_SOLICITANTE = sISTEMASOLICITANTE;
	}

	public String getCVE_SERVICIO_CONTRATADO() {
		return CVE_SERVICIO_CONTRATADO;
	}

	public void setCVE_SERVICIO_CONTRATADO(String cVESERVICIOCONTRATADO) {
		CVE_SERVICIO_CONTRATADO = cVESERVICIOCONTRATADO;
	}

	public String getID_APLICACION() {
		return ID_APLICACION;
	}

	public void setID_APLICACION(String iDAPLICACION) {
		ID_APLICACION = iDAPLICACION;
	}

	public String getRFC_PROVEEDOR() {
		return RFC_PROVEEDOR;
	}

	public void setRFC_PROVEEDOR(String rFCPROVEEDOR) {
		RFC_PROVEEDOR = rFCPROVEEDOR;
	}

	public String getTIPO_MENSAJE() {
		return TIPO_MENSAJE;
	}

	public void setTIPO_MENSAJE(String tIPOMENSAJE) {
		TIPO_MENSAJE = tIPOMENSAJE;
	}

	public String getNUM_CONTRATO() {
		return NUM_CONTRATO;
	}

	public void setNUM_CONTRATO(String nUMCONTRATO) {
		NUM_CONTRATO = nUMCONTRATO;
	}

	public String getFECHA_HORA_RECEPCION() {
		return FECHA_HORA_RECEPCION;
	}

	public void setFECHA_HORA_RECEPCION(String fECHAHORARECEPCION) {
		FECHA_HORA_RECEPCION = fECHAHORARECEPCION;
	}

	public String getXML() {
		StringBuffer xml = new StringBuffer();
		System.out.println("- Dentro de getXML");
		xml.append("<labOrder xmlns=\"http://www.openuri.org/\"> \n ");
		xml.append("	<GovTalkMessage xmlns=\"urn:hl7-org:v3\"> \n");
		xml.append("	<EnvelopeVersion>2.0</EnvelopeVersion> \n");
		xml.append("  <Header> \n");
		xml.append("   <MessageDetails> \n");
		xml.append("    <Class>POLB_RM004000</Class> \n");
		xml.append("    <Qualifier>HL7Message</Qualifier> \n");
		xml.append("  	<Function>submit</Function> \n");
		xml.append("	<TransactionID/> \n");
		xml.append("	<CorrelationID></CorrelationID> \n");
		xml.append("	<GatewayTimestamp>01:01:01 2011/01/01</GatewayTimestamp> \n");
		xml.append("   </MessageDetails> \n");
		xml.append("   <SenderDetails> \n");
		xml.append("		<SenderIP>11.254.16.122</SenderIP> \n");
		xml.append("		<Authentication> \n");
		xml.append("			<Method>clear</Method> \n");
		xml.append("			<Value/> \n");
		xml.append("		</Authentication> \n");
		xml.append("   </SenderDetails> \n");
		xml.append("   <ReceiverDetails> \n");
		xml.append("	<SenderIP>11.254.16.122</SenderIP> \n");
		xml.append("	<Authentication> \n");
		xml.append("		<Method>clear</Method> \n");
		xml.append("		<Value/> \n");
		xml.append("	</Authentication> \n");
		xml.append("   </ReceiverDetails> \n");
		xml.append("  </Header> \n");
		xml.append("	<GovTalkDetails> \n");
		xml.append("		<TargetDetails> \n");
		xml.append("			<Organization>IMSS</Organization> \n");
		xml.append("		</TargetDetails> \n");
		xml.append("	</GovTalkDetails> \n");
		xml.append("	<Body> \n");
		xml.append("<POLB_MT004000 xmlns='urn:hl7-org:v3' xmlns:xsi='http://www.w3.org/2002/XMLSchema-instance' xsi:schemaLocation='urn:hl7-org:v3 POLB_HD004000.xsd'>  \n");
		xml.append("<id root='2.16.840.1.113883.19.3.2409' extension='"
				+ this.NUM_FOLIO_ORDEN + "' displayable='true'/> \n");
		System.out.println("CVE_TIPO_SOLICITUD: " + this.CVE_TIPO_SOLICITUD);
		System.out.println("ORIGEN_PACIENTE: " + this.ORIGEN_PACIENTE);
		xml.append("<code code='"
				+ this.CVE_TIPO_SOLICITUD
				+ "' codeSystem='2.16.840.1.113883.5.4' codeSystemName='ActCode'/> \n");
		xml.append("<effectiveTime value='" + this.FECHA_HORA_CITA + "'/> \n");
		xml.append("<confidentialityCode code='"
				+ this.ORIGEN_PACIENTE
				+ "' codeSystem='2.16.840.1.113883.5.25' codeSystemName='Confidentiality' displayName='Display name'/> \n");
		for (Estudio estSol : estudios) {
			xml.append("<specimen> \n");
			xml.append("	<exposedEntity> \n");
			xml.append("	<id root='2.16.840.1.113883.19.3.2409' extension='"
					+ estSol.getCVE_LOINC_ESTUDIO()
					+ "' displayable='true'/> \n");
			for (Prueba p : estSol.getPruebas()) {
				xml.append("	<exposedMaterial> \n");
				xml.append("		<id root='2.16.840.1.113883.19.3.2409' extension='"
						+ p.getCVE_LOINC_PRUEBA() + "' displayable='true'/> \n");
				xml.append("		<existenceTime value='"
						+ p.getFECHA_HORA_ENTREGA_RESULTADOS() + "' /> \n");
				xml.append("		<riskCode code='"
						+ p.getTIPO_PROCESAMIENTO()
						+ "' codeSystem='2.16.840.1.113883.5.46' codeSystemName='EntityRisk' displayName='Display name'/> \n");
				xml.append("	</exposedMaterial> \n");
			}
			xml.append("	</exposedEntity> \n");
			xml.append("</specimen> \n");
		}
		xml.append("<recordTarget> \n");
		xml.append("	<patient> \n");
		xml.append("		<id root='2.16.840.1.113883.19.3.2409' extension='"
				+ this.cveIdee + "' displayable='true'/> \n");
		xml.append("	</patient> \n");
		xml.append("</recordTarget> \n");
		xml.append("<author> \n");
		xml.append("	<time value='" + this.STP_FECHA_ATENCION + "'/> \n");
		xml.append("	<assignedEntity> \n");
		xml.append("		<id root='2.16.840.1.113883.19.3.2409' extension='"
				+ this.CVE_ESPECIALIDAD + "' displayable='true'/> \n");
		xml.append("		<confidentialityCode code='"
				+ this.CVE_MATRICULA_MED_SOL
				+ "' codeSystem='2.16.840.1.113883.5.25' codeSystemName='Confidentiality' displayName='Display name'/> \n");
		xml.append("		<representedPublicInstitution> \n");
		xml.append("			<code code='"
				+ this.CVE_SERV_MED_SOLICITANTE
				+ "' codeSystem='2.16.840.1.113883.19.1.16040' codeSystemName='EntityCode'/> \n");
		xml.append("		</representedPublicInstitution> \n");
		xml.append("		<assignedPerson> \n");
		xml.append("			<id root='2.16.840.1.113883.19.3.2409' extension='"
				+ this.CVE_CEDULA_MED_SOL + "' displayable='true'/> \n");
		xml.append("			<name use='" + this.NOMBRE_MED_SOL + "'> \n");
		if (this.APELLIDO_MATERNO_MED_SOL != null
				&& !"".equals(this.APELLIDO_MATERNO_MED_SOL)) {
			xml.append("		<given>" + this.APELLIDO_MATERNO_MED_SOL
					+ "</given> \n");
		}
		xml.append("				<family>" + this.APELLIDO_PATERNO_MED_SOL
				+ "</family> \n");
		xml.append("			</name> \n");
		xml.append("		</assignedPerson> \n");
		xml.append("	</assignedEntity> \n");
		xml.append("</author> \n");
		xml.append("<verifier>  \n");
		xml.append("	<time value='" + this.FECHA_HORA_REG_LO + "'/> \n");
		xml.append("	<assignedEntity> \n");
		xml.append("		<confidentialityCode code='"
				+ this.CVE_MAT_REG_LOG
				+ "' codeSystem='2.16.840.1.113883.5.25' codeSystemName='Confidentiality' displayName='Display name'/> \n");
		xml.append("		<representedPublicInstitution> \n");
		xml.append("			<code code='"
				+ this.CVE_PRES_UM_REALIZA_ESTUDIO
				+ "' codeSystem='2.16.840.1.113883.19.1.16040' codeSystemName='EntityCode'/> \n");
		xml.append("		</representedPublicInstitution> \n");
		xml.append("		<assignedPerson> \n");
		xml.append("			<name use='" + this.NOMBRE_REG_LO + "'> \n");
		if (this.APELLIDO_MATERNO_REG_LO != null
				&& !"".equals(this.APELLIDO_MATERNO_REG_LO)) {
			xml.append("		<given>" + this.APELLIDO_MATERNO_REG_LO
					+ "</given> \n");
		}
		xml.append("				<family>" + this.APELLIDO_PATERNO_REG_LO
				+ "</family> \n");
		xml.append("			</name> \n");
		xml.append("		</assignedPerson> \n");
		xml.append("	</assignedEntity> \n");
		xml.append("</verifier> \n");
		if (this.CVE_TURNO != null && !"".equals(this.CVE_TURNO)
				&& this.CVE_LUGAR_ATENCION != null
				&& !"".equals(this.CVE_LUGAR_ATENCION)
				&& this.CVE_TIPO_LUGAR_ATENCION != null
				&& !"".equals(this.CVE_TIPO_LUGAR_ATENCION)) {
			xml.append("<dataEntryLocation> \n");
			xml.append("	<locatedEntity> \n");
			if (this.CVE_TURNO != null && !"".equals(this.CVE_TURNO)) {
				xml.append("	<id root='2.16.840.1.113883.19.3.2409' extension='"
						+ this.CVE_TURNO + "' displayable='true'/> \n");
			}
			if (this.CVE_LUGAR_ATENCION != null
					&& !"".equals(this.CVE_LUGAR_ATENCION)
					&& this.CVE_TIPO_LUGAR_ATENCION != null
					&& !"".equals(this.CVE_TIPO_LUGAR_ATENCION)) {
				xml.append("		<Place> \n");
				if (this.CVE_LUGAR_ATENCION != null
						&& !"".equals(this.CVE_LUGAR_ATENCION)) {
					xml.append("		<asLocatedEntityHasParts> \n");
					xml.append("			<id root='2.16.840.1.113883.19.3.2409' extension='"
							+ this.CVE_LUGAR_ATENCION
							+ "' displayable='true'/> \n");
					xml.append("		</asLocatedEntityHasParts> \n");
				}
				if (this.CVE_TIPO_LUGAR_ATENCION != null
						&& !"".equals(this.CVE_TIPO_LUGAR_ATENCION)) {
					xml.append("		<asLocatedEntityPartOf> \n");
					xml.append(" 			<id root='2.16.840.1.113883.19.3.2409' extension='"
							+ this.CVE_TIPO_LUGAR_ATENCION
							+ "' displayable='true'/> \n");
					xml.append("		</asLocatedEntityPartOf> \n");
				}
				xml.append("		</Place> \n");
			}
			xml.append("	</locatedEntity> \n");
			xml.append("</dataEntryLocation> \n");
		}
		xml.append("<component>  \n");
		xml.append("	<diagnostic> \n");
		xml.append("		<id root='2.16.840.1.113883.19.3.2409' extension='"
				+ this.CVE_DIAG_PRESUNTIVO + "' displayable='true'/> \n");
		xml.append("		<code code='"
				+ this.FOLIO_SOLICITUD_LAB
				+ "' codeSystem='2.16.840.1.113883.5.4' codeSystemName='ActCode'/> \n");
		xml.append("		<text mediaType='text/plain'>"
				+ this.COMP_DIAG_PRESUNTIVO + "</text> \n");
		xml.append("	</diagnostic> \n");
		xml.append("</component> \n");
		xml.append("<subjectOf> \n");
		xml.append("	<controlActEvent> \n");
		xml.append("		<id root='2.16.840.1.113883.19.3.2409' extension='"
				+ this.TIPO_MENSAJE + "' displayable='true'/> \n");
		xml.append("		<code code='"
				+ this.SISTEMA_SOLICITANTE
				+ "' codeSystem='2.16.840.1.113883.5.4' codeSystemName='ActCode'/> \n");
		xml.append("		<priorityCode code='"
				+ this.CVE_SERVICIO_CONTRATADO
				+ "' codeSystem='2.16.840.1.113883.5.7' codeSystemName='ActPriority' displayName='Display name'/> \n");
		xml.append("		<confidentialityCode code='"
				+ this.ID_APLICACION
				+ "' codeSystem='2.16.840.1.113883.5.25' codeSystemName='Confidentiality' displayName='Display name'/> \n");
		xml.append("		<uncertaintyCode code='"
				+ this.NUM_CONTRATO
				+ "' codeSystem='2.16.840.1.113883.5.25' codeSystemName='Confidentiality' displayName='Display name'/> \n");
		xml.append("		<reasonCode code='"
				+ this.RFC_PROVEEDOR
				+ "' codeSystem='2.16.840.1.113883.5.8' codeSystemName='ActReason' displayName='Display name'/> \n");
		xml.append("	</controlActEvent> \n");
		xml.append("</subjectOf> \n");
		xml.append("</POLB_MT004000> \n");
		xml.append("	</Body> \n");
		xml.append("</GovTalkMessage> \n");
		xml.append("</labOrder> \n");
		return xml.toString();
	}
}
